<!--
  功能：电子申请单
  作者：licy
  邮箱：licy@briup.com
  时间：2020年12月13日 09:02:21
  版本：v1.0
  修改记录：
  修改内容：
  修改人员：
  修改时间：
-->
<template>
  <div class="apply_create">
    <el-page-header @back="goBack" content="我要请假"> </el-page-header>
    <div class="page_info" style="margin-top: 1em; color: red">
      电子请假单
      <p>1. 如果只请假一天，请假时间的起止时间应该是一样的</p>
      <p>2. 如果请整天假，请勾选"上午","下午","晚自习"</p>
      <p>3. 假条照片：需要自己手写一个纸质版假条，然后拍照上传</p>
      <p>4. 一次请假时间不允许超过15天</p>
    </div>
    <div class="form_content">
      <el-form
        size="small"
        :model="form"
        ref="apply_form"
        :rules="rules"
        label-width="80px"
      >
        <el-form-item :label="type + '原因'" prop="reason">
          <el-input type="textarea" :rows="4" v-model="form.reason"></el-input>
        </el-form-item>
        <div v-if="type == '请假'">
          <el-form-item label="请假时间" prop="applyDate">
            <el-date-picker
              :picker-options="pickerOptions" 
              v-model="form.applyDate"
              type="daterange"
              value-format="timestamp"
              range-separator="至"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
            >
            </el-date-picker>
          </el-form-item>
          <el-form-item label="请假阶段" prop="applyStages">
            <el-checkbox-group v-model="form.applyStages">
              <el-checkbox label="上午" value="1"></el-checkbox>
              <el-checkbox label="下午" value="2"></el-checkbox>
              <el-checkbox label="晚自习" value="3"></el-checkbox>
            </el-checkbox-group>
          </el-form-item>
          <el-form-item label="假条照片" prop="leavePaper">
            <el-upload
              action="http://218.4.196.178:8008/file/upload"
              :on-success="uploadLeavePaperSuccessHandler"
              :limit="1"
            >
              <el-button type="text">点击上传</el-button>
            </el-upload>
            <div class="leave_paper photo"><img :src="form.leavePaper" /></div>
          </el-form-item>
          <el-form-item label="请假证明" prop="scrip">
            <el-upload
              action="http://218.4.196.178:8008/file/upload"
              :on-success="uploadScriprSuccessHandler"
              :limit="1"
            >
              <el-button type="text">点击上传</el-button>
            </el-upload>
            <div class="photo"><img :src="form.scrip" /></div>
          </el-form-item>
        </div>
        <el-form-item style="text-align: right">
          <el-button type="primary" @click="submitHandler">提交</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
import { get, post } from "@/utils/request";
import _ from "lodash";
import { mapGetters } from "vuex";
export default {
  // 组件名称
  name: "demo",
  // 组件参数 接收来自父组件的数据
  props: {},
  // 组件状态值
  data() {
    return {
      form: {
        applyStages: [],
      },
      type: "申请",
      rules: {
        reason: [
          { required: true, message: "请输入请假原因", trigger: "blur" },
        ],
        applyDate: [
          { required: true, message: "请选择请假时间", trigger: "blur" },
        ],
        applyStages: [
          { required: true, message: "请选择请假阶段", trigger: "blur" },
        ],
        leavePaper: [
          { required: true, message: "请提交假条照片", trigger: "blur" },
        ],
        scrip: [{ required: true, message: "请提交请假证明", trigger: "blur" }],
      },
      pickerOptions: {
        //禁用当前日期之前的日期
        disabledDate(time) {
          //Date.now()是javascript中的内置函数，它返回自1970年1月1日00:00:00 UTC以来经过的毫秒数。
          return (time.getTime() < Date.now() - 8.64e7) ;
        },
      },
    };
  },
  // 计算属性
  computed: {
    ...mapGetters(["user"]),
  },
  // 侦听器
  watch: {},
  // 组件方法
  methods: {
    uploadScriprSuccessHandler(response) {
      if (response.status == 200) {
        let url = "https://file.briup.cn:28888/group1/" + response.data.id;
        this.$set(this.form, "scrip", url);
      } else {
        this.$message({ type: "error", message: "附件服务器异常！" });
        this.visible = false;
      }
    },
    uploadLeavePaperSuccessHandler(response) {
      if (response.status == 200) {
        let url = "https://file.briup.cn:28888/group1/" + response.data.id;
        this.$set(this.form, "leavePaper", url);
      } else {
        this.$message({ type: "error", message: "附件服务器异常！" });
        this.visible = false;
      }
    },
    goBack() {
      this.$router.back();
    },
    // 提交
    submitHandler() {
      this.$refs["apply_form"].validate((valid) => {
        if (valid) {
          const url = "/leave/apply";
          this.form.studentId = this.user.student.id;
          post(url, this.form).then((response) => {
            this.visible = false;
            this.$message({ message: response.message, type: "success" });
            this.goBack();
          });
        } else {
          return false;
        }
      });
    },
  },
  // 以下是生命周期钩子
  /**
   * 组件实例创建完成，属性已绑定，但DOM还未生成，$ el属性还不存在
   */
  created() {
    this.type = this.$route.query.applyType;
  },
  /**
   * el 被新创建的 vm.$ el 替换，并挂载到实例上去之后调用该钩子。
   * 如果 root 实例挂载了一个文档内元素，当 mounted 被调用时 vm.$ el 也在文档内。
   */
  mounted() {},
  /**
   * 实例销毁之前调用。在这一步，实例仍然完全可用。
   */
  beforeDestroy() {},
  /**
   * Vue 实例销毁后调用。调用后，Vue 实例指示的所有东西都会解绑定，
   * 所有的事件监听器会被移除，所有的子实例也会被销毁。
   */
  destroyed() {},
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后，父组件的style样式将不会渗透到子组件中，-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响，-->
<!--这么设计的目的是父组件可以对子组件根元素进行布局。-->
<style scoped lang="scss">
.form_content {
  width: 80%;
  padding: 2em;
  margin: 0 auto;
  background-color: #fff;
}
.photo {
  width: 300px;
  height: 200px;
  border: 1px solid #ccc;
  border-radius: 5px;
  text-align: center;
  line-height: 200px;
  overflow: hidden;

  img {
    width: 100%;
  }
}
</style>
